// app.js
App({
  globalData: {
    userInfo: null,
    communityId: '',
    communityName: '',
    baseUrl: 'https://api.example.com', // 替换为实际API域名
    cartCount: 0,
    cart: []
    // // 确保cart始终是数组(此种方法，慎用)

    // get cart() {
    //   const cart = wx.getStorageSync('cart')
    //   return Array.isArray(cart) ? cart : []
    // },
    // set cart(value) {
    //   wx.setStorageSync('cart', Array.isArray(value) ? value : [])
    // }
  },

  // 添加到购物车（带规格检查）
  addToCart(product) {
    try {
      // 确保cart是数组
      const cart = [...this.globalData.cart]
      
      // 检查product是否有效
      if (!product || typeof product !== 'object') {
        throw new Error('无效的商品数据')
      }

      const existing = cart.find(item => 
        item.id && product.id && item.id === product.id
      )
      
      if (existing) {
        existing.quantity = (existing.quantity || 0) + 1
      } else {
        cart.push({
          ...product,
          quantity: 1,
          selected: true
        })
      }
      
      this.globalData.cart = cart
      return true
    } catch (error) {
      console.error('添加购物车失败:', error)
      return false
    }
  },

  // 更新数量（带最小值保护）
/**
 * 更新商品数量
 * @param {string} id - 商品ID 
 * @param {number} quantity - 新数量
 * @param {string} [specs] - 商品规格（可选）
 * @returns {boolean} 是否更新成功
 */
  updateQuantity(id, quantity, specs) {
    try {
        if (!id || typeof quantity !== 'number' || quantity <= 0) {
            throw new Error('无效参数')
        }
  
        const cart = [...(this.globalData.cart || [])]
        const item = cart.find(item => 
            item.id === id && item.specs === specs
        )
        
        if (!item) {
            console.warn('未找到对应商品:', {id, specs})
            return false
        }
  
        const MAX_QUANTITY = 999
        item.quantity = Math.min(Math.max(1, quantity), MAX_QUANTITY)
        
        // 确保同步更新globalData和Storage
        this.globalData.cart = cart
        wx.setStorageSync('cart', cart)
        return true
        
    } catch (error) {
        console.error('更新数量失败:', error)
        return false
    }
  },
safeSaveCart(cart) {
  try {
    if (!Array.isArray(cart)) throw new Error('数据非数组')
    wx.setStorageSync('cart', cart)
    return true
  } catch (e) {
    console.error('存储失败:', e)
    wx.setStorageSync('cart', []) // 重置为安全值
    return false
  }
},


  // 移除商品
/**
 * 从购物车移除商品
 * @param {string} id - 商品ID
 * @param {string} [specs] - 商品规格（可选）
 * @returns {boolean} 是否移除成功
 */
removeItem(id, specs = 'MR') {
  try {
    // 1. 参数检查
    if (!id) {
      throw new Error('缺少商品ID')
    }

    // 2. 获取当前购物车（安全处理非数组情况）
    const currentCart = this.globalData.cart
    if (!Array.isArray(currentCart)) {
      this.globalData.cart = []
      return false
    }

    // 3. 过滤出要保留的商品
    const newCart = currentCart.filter(item => 
      !(item.id === id && item.specs === specs)
    )

    // 4. 检查是否真的移除了商品
    if (newCart.length === currentCart.length) {
      console.warn('未找到对应商品:', {id, specs})
      return false
    }

    // 5. 更新数据
    this.globalData.cart = newCart
    
    // 6. 持久化存储（带错误处理）
    try {
      wx.setStorageSync('cart', newCart)
    } catch (storageError) {
      console.error('存储购物车失败:', storageError)
      // 尝试恢复原始数据
      this.globalData.cart = currentCart
      return false
    }
    
    return true
    
  } catch (error) {
    console.error('移除商品失败:', error)
    return false
  }
},

  // 持久化存储
  // 保存购物车状态
  saveCart(cart) {
    this.globalData.cart = cart
    wx.setStorageSync('cart', cart)
  },

  onLaunch() {
    // 修复可能损坏的购物车数据
    const rawCart = wx.getStorageSync('cart')
    if (!Array.isArray(rawCart)) {
      wx.setStorageSync('cart', [])
    }

    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    
    // 登录
    wx.login({
      success: res => {
        // 发送res.code到后台换取openId, sessionKey, unionId
        console.log('登录code:', res.code)
      }
    })
    
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo
              
              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  }
})    